flyweight design pattern csharp